package br.com.ds3.controller;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.view.Results;
import br.com.ds3.annotation.Public;
import br.com.ds3.dao.UsuarioDAO;
import br.com.ds3.model.Perfil;
import br.com.ds3.model.Usuario;
import br.com.ds3.session.UserSession;

@Resource
public class LoginController {

    private Result result;
    private UserSession userSession;
    private UsuarioDAO usuarioDAO;

    public LoginController(Result result, UserSession userSession, UsuarioDAO usuarioDAO) {
        this.result = result;
        this.userSession = userSession;
        this.usuarioDAO = usuarioDAO;
    }

    @Public
    @Post
    public void autenticar(Usuario usuario, String clearPassword) {
    	if (usuarioDAO.list().isEmpty()) {
    		Usuario admin = new Usuario();
    		admin.setNome("ADMINISTRADOR DO SISTEMA");
    		admin.setNomeUsuario("ADMIN");
    		admin.setCpf("642.947.432/12");
    		admin.setEmail("admin@newevent.com.br");
    		admin.setPerfil(Perfil.ADMINISTRADOR);
    		admin.setSenha("1234");
    		usuarioDAO.save(admin);
    		
    		usuarioDAO.getSession().flush();
    	}
    	
        Usuario user = usuarioDAO.autenticar(usuario.getNomeUsuario(), clearPassword);
        
        if (user != null) {
            userSession.setUser(user);
        } else {
            result.redirectTo(PrincipalController.class).home("Usuario ou senha incorretos");
            return;
        }
        
        if (userSession.getUser().getPerfil().equals(Perfil.PARTICIPANTE)) {
        	result.redirectTo(ParticipanteController.class).meusDados(null, new Long(1));
        } else {
        	result.redirectTo(PrincipalController.class).areaRestrita();
        }
    }

    @Public    
    @Post
    public void logout() {
        userSession.logout();
        result.redirectTo(PrincipalController.class).home(null);
    }
    
    @Public
    @Post
    public void estaLogado() {
        Long retorno;
        
        if (userSession.getUser() != null) {
        	retorno = new Long(0);
        } else {
        	retorno = new Long(1);
        }
        	
        result.use(Results.json()).withoutRoot().from(retorno).serialize();
    }
}
